Ethernet fr TT Die hier vorgestellte L”sung einer LAN Karte fr den TT basiert auf der PC ISA Karte SMC ELITE ULTRA von SMC (siehe Abbildung). Diese Karte zeichnet sich durch hervorragende Performance und ein gut geeignetes Bus Interface aus. Diese Karte ist zwar teurer (ca 160,-) als eine NE2000 kompatible Karte, was aber durch die obigen Vorteile eindeutig wett gemacht wird. Das Interface kann auch fr andere Karten verwendet werden, wobei aber zu Beachten ist, daž nur wenige der m”glichen ISA Buszyklen untersttzt werden. Bei der Entwicklung der Schaltung stand der geringe Aufwand im Vordergrund. Um das zu erreichen waren einige Kompromisse notwendig, die aber der Performance nicht im geringsten abtr„glich sind! Zugriffe Wie in der Schaltung zu sehen ist, wurden die Daten und Adressleitungen der beiden Bussysteme einfach miteinander verbunden. Im Schaltplan sind die Pull Up Widerst„nde von 1.2kOhm von alle Adressen und Datenleitungen, sowie der MEM und IO Leitungen nicht eingezeichnet. Diese mssen ganz dicht an den ISA Pins angeschlossen werden. Zwei GAL's sorgen fr eine Anpassung des Timings von Zugriffen des VME Busses auf den ISA Bus. Dabei werden drei Arten von Zugriffen unterschieden: 1. 16 Bit Memoryzugriff. Hier erfolgt ein wortweiser Zugriff vom VME Bus auf high und low Byte gleichzeitig. Auch die LAN Karte beherrscht diesen Zugriff. Dabei muž die Leitung /SBHE aktiviert werden, w„hrend der Lese/Schreibzugriff erfolgt. Der Zugriff erfolg auf den Adressen $FE000000 bis $FE100000. Wichtig: Da der PC ein little Endian Maschine ist, mssen die Datenleitungen des low und high Byte vertauscht werden!!. 2. 8 Bit IO Zugriff gerade Adressen. Dieser Zugriff greift auf die geraden Adressen der ISA Karte zu. Diese Adressen werden beim ISA Bus ber D0-D7 bertragen. /SBHE wird hier nicht aktiviert, da der Transfer nur ber den PC Slot l„uft. A0 ist hier 0 3. 8 Bit IO Zugriff ungerade Adressen. Hier soll auf die ungeraden Adressen der ISA Karte zugegriffen werden. Diese werden bei dieser aber auch ber D0-D7 transferiert. Der 68000 erwartet diese aber auf seinen D0-D7 die mit D8-D15 des ISA Bus verbunden sind. Um hier keinen Bustreiber verwenden zu mssen, wurde dieser Zugriff ebenfalls auf eine gerade 68000er Adresse gelegt. Nur die Leitung A0 erh„lt hier einen anderen Wert. Dieser wird aus A20 des VME Bus abgeleitet. Somit zerf„llt der IO Adressbereich in zwei getrennte Bereiche fr gerade und ungerade Bytes. Timing Das VME Timing ist grunds„tzlich asynchron, und l„žt sich somit recht einfach an das andere Timing anpassen. Dabei wird der VME Buszyklus solange verl„ngert, bis die Karte die Daten bereitsgestellt bzw abgeholt hat. Dieser Vorgang wird ber die Verz”gerung von /DTACK mit Hilfe des Schieberegisters IC1 (74164) durchgefhrt. Das Schieberegister wird mit jedem Zyklus (/DS und /AS werden aktiviert) ber /T_ST freigegeben, und schiebt dann eine 1 hindurch. Diese erscheint dann jeweils nach einem Clock Impuls einen Ausgang weiter. Nach 4 Impulsen erreicht sie schliežlich den Ausgang Q3. dadurch wird DTACK aktiviert, falls die PC Karte nicht mit /RDY noch etwas Zeit fordert. Der gesamte Vorgang dauert ca. 280ns, wodurch eine Transferrate von ca 6 MB/s erreicht werden kann. Hier zeigt sich, daž die SMC Karte anderen Karten weit berlegen ist. Bei einem Blick in die GAL Gleichungen ist festzustellen, daž die MEM und IO Leitungen des ISA Bus erst bei T1 aktiviert werden. Das ist notwendig, damit die Adressen lange genug vor dem Kartenzugriff stabil sind. Hier ist das PC Timing sehr kritisch und vor allem berhaupt nicht logisch! ursprnglich hatte ich noch ein BALE Signal aus T1 erzeugt, es hat sich aber gezeigt, daž das berhaupt nicht notwendig ist. Interrupts Eine LAN Karte ohne Interrupt ist praktisch wertlos, daher wurde eine eigene Interruptlogik installiert, die einen Vektorinterrupt auf dem VME Bus ausl”st. Das ist notwendig, weil der VME Bus keinen Autointerrupt untersttzt. Der Vektorgenerator ist hier IC2 (74LS245) dessen Eing„nge fest auf den Vektor $AA verdrahtet sind. Hier kann auch ein beliebiger anderer freier Vektor gew„hlt werden. Auf meinem Prototypen ist hier ein Schalterarray angeordnet. Die Logik, die zu Erkennung und Best„tigung eines Interruptes notwendig ist befindet sich im Gal VME_PC17. Dieses GAL ben”tigt die Adressen A1-A3, da die CPU hierber bekanntgibt welcher Interruptlevel best„tigt werden soll. Das Interface verwendet Interruptlevel 4. Aus Faulheit wurde die Interruptkette (IACKIN/IACKOUT) nicht implementiert. Daher darf keine andere VME Buskarte den Interrupt 4 verwenden. Die Interruptquelle ist der Interrupt 3 (IRQ3) der ISA Karte. Diese Leitung ist high aktiv, und ben”tigt daher einen pull-down Widerstand! GAL VME_PC16 *IDENTIFICATION VME_PC; *TYPE GAL20V8; *PINS /AS = 23, /WR = 2, /DS0 = 3, /DS1 = 4, A21 = 5, A22 = 6, A23 = 7, T1 = 8, T2 = 9, /WAIT = 10, A20 = 11, /DTACK.T = 15, T_START.T = 18, /SBHE.T = 17, A0.T = 16, /MWR.T = 22, /MRD.T = 21, /IOW.T = 20, /IOR.T = 19; *BOOLEAN-EQUATIONS DTACK = /A22 & /A23 & (DS1 + DS0) & AS & T2 & /WAIT; T_START = /A22 & /A23 & AS & (DS0 + DS1); IOW = A21 & /A22 & /A23 & AS & DS1 & WR & T1; IOR = A21 & /A22 & /A23 & AS & DS1 & /WR & T1; MWR = /A21 & /A22 & /A23 & AS & (DS0 + DS1) & WR & T1; MRD = /A21 & /A22 & /A23 & AS & (DS0 + DS1) & /WR & T1; SBHE = /A21 & /A22 & /A23 & AS & (DS0 & DS1 + DS0 & /DS1); A0 = /A21 & /A22 & /A23 & AS & /DS1 & DS0 + A21 & /A22 & /A23 & AS & A20; *END GAL VME_PC17 *IDENTIFICATION VME_PC1; *TYPE GAL16V8; *PINS /RESET = 1, /DS0 = 7, /IACK = 8, A1 = 4, A2 = 5, A3 = 6, IRQ3_PC = 9, /DTACK.T = 12, /VEKTOR.T = 14, /IRQ4.T = 13, RESET_PC.T = 19; *BOOLEAN-EQUATIONS DTACK = /A1 & /A2 & A3 & DS0 & IACK; VEKTOR = /A1 & /A2 & A3 & DS0 & IACK; IRQ4 = IRQ3_PC; RESET_PC = RESET; *END Stckliste IC1 74LS164 IC2 74LS245 VME_PC16 GAL 20V8 VME_PC17 GAL 16V8 R1 1k R2 1k D1-D3 1N4181 RN1-5 Widerstandsarrays 8*1.2k (nicht eingezeichnet, siehe Text) Cx 100nF Blockkondensatoren an jedem IC und am PC Slot (m”glichst mehrfach!) AUFBAU Der Aufbau der Schaltung ist vor allem eine mechanische Herausforderung. Beim Aufbau ist darauf zu Achten, daž alle Adress und Datenleitungen mit den angegebenen Pull-up Widerst„nden versehen werden. Wird das nicht gemacht, kommt es zu Lese und Schreibfehlern beim Zugriff auf die Karte, die sehr unsch”ne Systemabstrze zur Folge haben k”nnen. Ich habe die Schaltung auf einer Europa-Experimentierplatine aufgebaut. Der PC Slot ist mit ca 20cm fliegenden Leitungen angeschlossen. Da mein TT im Tower wohnt kann ich keine Aussagen zum Originalgeh„use treffen. Falls der VME Slot schon mit einer Grafikkarte belegt ist, muž man sich etwas einfallen lassen, um einen weiteren VME Slot zu erhalten. Dazu muž der neue Slot einfach mit dem bestehenden parallel geschaltet werden. Das Interface ben”tigt eigentlich nur eine 64-polige Verbindung (a und c Reihe), da die mittlere Pinreihe des VME-Bus (fast) nicht ben”tigt wird. Die IRQ-4 Leitung ist die einzige, die auf der mittleren Pinreihe liegt! Falls es zu Adresskonflikten mit einer anderen VME Karte kommen sollte muž das GAL VME_PC16 umprogrammiert werden (Auswertung von A22 und A23). Konfigurieren der Karte Die Karte beitzt zum Glck nur einen einzigen Jumper, der in die Stellung "280 3 D000 NONE" gebracht wird. Fr die Tests mit der Software sollte mindestens ein T Stck mit 2 Abschlužwiderst„nden auf den BNC Connector gesteckt werden. Die Karte besitzt eine LED, die die Netzaktivit„t anzeigt. Test der Hardware Bein Einschalten, sowie bei einem Reset (CTRL-ALT-DEL gengt) muž die Akivit„ts LED auf der Karte aufleuchten und nach einigen Sekunden wieder erl”schen. Damit ist der Reset schon in Ordnung. Bevor der Treiber installiert wird kann die Hardware grob geprft werden. Dazu wird ein Debugger bzw Monitor ben”tigt (z.B. PD, der Pure C Debugger). Mit diesem Monitor wird die Adresse $FE200280 beobachtet. Hier sollte jedes 2. Byte != $FF sein. Ab $FE2002A0 sollten wieder alle Bytes $FF sein, wie auch vor der obigen Adresse. Dieses Verhalten muž auch an Adresse $FE300280 feststellbar sein, wobei hier aber andere Werte stehen mssen. Durch wechselseitiges zusammensetzen der Bytes muž die auf der Karte aufgedruckte Ethernetadresse erkennbar werden. War das erfolgreich, kann der Treiber installiert werden. Software Die Software besteht aus einem Treiber fr das ANS (Atari Network System). Dieser Treiber stellt einfache Funktionen zum lesen und schreiben von Datenpaketen zur Verfgung. Die Einbindung erfolgt ber ein Cookie. Der Treiber wurde bei mir mit dem TUW TCP/IP Stack sowie Telnet und FTP getestet. Als Gegenstelle dient mir ein LINUX PC. Auf dem TT wird bei mir MAG!C eingesetzt, Plain TOS sollte genauso gehen. Mit MinT wird's wahrscheinlich nicht funktionieren (hab's aber nicht getestet). Damit jeder sehen kann, wie die Karte angesteuert wird, sind dem Paket die Sourcen des Treibers beigelegt. Mit PURE-C sollte das šbersetzen kein Problem sein. In dem File WD_TOOLS.C kann die Initialisierung und der Test der Karte eingesehen werden, falls der Vorgang zu Testzwecken manuell durchgefhrt werden muž. Hinweise Alle Angaben dieses Paketes sind ohne Gew„hr. Fr durch den Betrieb oder Aufbau der Scahltung oder der Software entstehende Sch„den kann ich keine Haftung bernehmen. Der Betrieb ist auf eigene Gefahr und Risiko. Die Weitergabe und Verwendung dieses Dokumentes und der zugeh”rigen Software ist frei. Falls jemand die Schaltung erfolgreich aufgebaut hat oder falls noch Fragen bestehen, stehe ich gerne fr weitere Fragen zur Verfgung. Ich setzte jedoch voraus, daž der Erbauer dieses Interfaces etwas Erfahrung im Umgang mit dem Oszilloskop hat, denn ansonsten ist eine Ferndiagnose vollkommen sinnlos. Falls jemand Fehler findet, bitte ich ebenfalls um Nachricht, damit ich diese in dem Paket korrigieren kann. Es wird von mir jedoch keine Platine oder fertig gebrannte GAL's geben, da ich nicht in der Lage bin, diese zu vertreiben. Falls jemand eine Platine dafr erstellt hat, bitte ich um Nachricht, denn ich h„tte gerne auch eine :-) ) Pinbelegungen Das Platinenprogramm nummeriert die Pins eines Steckers fortlaufend durch. Somit ergebn sich folgende Zuordungen: VME Bus: Pin a1-a32 1-32 Pin b1-b32 33-64 Pin c1-c32 65-96 PC Bus: Pin A1-A31 32-62 Pin B1-B31 1-31 Pin C1-C18 19-36 Pin D1-D18 1-18 Adressen Sackpost: Ulrich R”hr Gustav Adolf Str. 13 63452 Hanau Maus: Ulrich Roehr @ F Internet: ulrich_roehr@f.maus.de ANHANG PC Bus Signalbeschreibung AEN A11 0 This output signal when inactive (low) indicates that the CPU or controller board bus master has control of the bus. When active, the DMA controller has control of the bus. It is often used to disable devices which must not respond during a DMA cycle. BALE B28 0 This output signal (when high) indicates that a valid address is present on the LA<23..I7> address lines. The LA<23. .I7> address lines or any decodes developed from them should be latched at the falling edge of BALE. This line is high when a 0MA or bus master operation is occurring. BCLK B20 0 This output signal is provided to allow synchronization to the main processor clock. Its freguency will be either 8 MHz or 8 MHz with a duty cycle of 50%. BUSR0Y A10 I This input signal is used to lengthen a bus cycle from its standard time if a controller board cannot respond guickly enough. It should be pulled low by an open collector type device as soon as a slow addressed device is selected and held low until the device has responded. Bus cycles are lengthened by an integral number of (BCLK) cycles. This line should not be held low for more than 2.5 us. This line should be driven by an oPen-collector device capable of sinking 20 mA. .. DAK0- D08 0 DAK1- B17 0 DAK2- B26 0 DAK3- B15 0 DAK5- B10 0 DAK6- D12 0 DAK7- D14 0 These output lines (DMA Acknowledge) indicate that a reguest for a 0MA service from the DMA subsystem has been recognized. The acknowledge is indicated by a L0W on this line. Use this line with the l0RC- or I0WC- line to decode the desired 0MA device. If used to signal acceptance of a bus-master reguest, this signal indicates when it is legal to pull GRAB- low. DRQ0 D09 l DRQ1 B18 l DRQ2 B06 I DRQ3 B16 I 0RQ5 D11 I 0RQ6 D13 I DR07 D15 l These input lines are used to request a DMA service from the DMA subsystem or to gain control of the system bus from the main CPU (DMA request). The request is made when the Iine goes from a low to a high and must remain high until the appropriate DAK<7. .5>, <3. .0> line goes active. GRAB- D17 l This input signal is used to indicate that a controlIer board bus master is controlling the bus. A controlIer board can puIl this line Iow when the appropriate DAK line is made active, signalIing that a master request is granted. The system address, data and controI lines wiII be floated, allowing the controller board to begin controlling them one full DCLK period after GRAB is made active. At Ieast one more fulI BCLK period should be allowed after putting a vaIid address on the bus before activating any of the controI lines. This line should be driven by an open-collector device capabIe of sinking 20 mA. GROUND B01 - B10 - B31 - D18 - These lines are connected to the system ac and dc ground. The maximum current allowed on any singIe contact is I.5 A. IOCHK- A01 I This input signal is used to signaI the CPU about Parity or other serious errors on controller boards. This signal should be driven low by an open colIector type output capabIe of sinking 20 mA when an uncorrectabIe system error occurs. lORC- B14 l/0 This output Iine (l/O read) indicates (when low) when an I/0 device is to send data to the data bus. lt can be driven bv a controller board acting as a bus master. I0WC- B13 I/0 This output Iine (I/0 write) indicates (when low) when an I/0 device is to accept the data from the data bus. It can be driven bv a controlIer board acting as a bus master. l016- D02 I This input line (I/0 is l6 bits) signaIs the system that the addressed I/0 device is capable of transferring l6 bits of data at once. When this line is made active, during an l/0 read or write, the standard one wait state I/0 cycle wiIl be run. This line should be driven low by an open-colIector device canabIe of sinking 20 mA. IRQ3 B25 I lRQ4 B24 l IRQ5 B23 l IRQ6 B22 I IRQ7 B21 I IRQ9 B04 I IRQ10 D03 I IRQ11 D04 I lRQ12 D05 l lR014 D07 l IRQ15 D06 l These input lines are used to interrupt the CPU to request some service. The interrupt is recognized when the line goes from a low to a high and remains there until the appropriate interrupt service routine is executed. LA17 C08 I/O LA18 C07 I/O LA19 C06 l/O LA2D CD5 I/O LA21 CD4 I/O LA22 C03 I/O LA23 C02 I/O These output signals (LatchabIe Address) are used to decode memory which must respond with zero or one wait state. They are only guaranteed to be valid when BALE is high. These can be driven by a controller board acting as a bus master. MRDC- C09 I/O This output line (Memory Read) indicates (when Iow) when a memory device is to send data to the data bus. This signaI is active over the entire address space of the system. It can be driven by a controIler board acting as a bus master. MWTC- C10 I/O This output line (Memory Write) indicates (when low) when a memory device is to accept the data from the data bus. This signal is active over the entire address space of the system. It can be driven bv a controIler board acting as a bus master. MI6- D01 I This input Iine (memory is l6 bits) signais the system that the addressed memory is capabIe of transferring I6 bits of data at once. When this line is made active, during a memory read or write, the standard one wait state memory cycle wilI be run. This line shouId be derived from the LA<23. .I7> address Iines. This line shouId be driven low by an open collector device capabIe cf sinking 20 mA. N0WS- B08 I This input Iine (No Wait State) is used to inform the system that standard wait states can be deleted for cycIes when this line is made active. The line must be pulled low 45 ns before the falling edge of BCLK in order to be recognized. This Iine shouId be driven by an cpen collector device capabIe of sinking 20 mA. O5C B30 O This output signai is a cIock for use in video color burst and other general timing applications. Its frequencv is I4.3I8I8 MHz and duty cycle is approximateIy 50%. REFRESH- B19 I/O This output signal is used to indicate (when Iow) a refresh cycle in progress. It shouid be used to enabIe the SA<7. .0> address lines to the row address inputs of aIl banks of dynamic memory so that when the MRDC- goes active, the entire system memory is refreshed at one time. It can be driven by a controIier board acting as a bus master. RESDRV B02 O This output signal is used to reset the hardware during powerup or power failure. SA0 A3I I/O SA1 A3D I/O SA2 A29 I/O SA3 A28 I/O 5A4 A27 I/O 5A5 A26 I/O SA6 A25 I/O SA7 A24 I/O SA8 A23 I/O SA9 A22 I/O SAI0 A21 I/O SAlI A20 I/O SAl2 A19 I/O SAl3 A18 I/O SAl4 A17 I/O SAl5 A16 I/O SAI6 A15 I/O SAI7 A14 I/O SAl8 A13 I/O SA19 A12 I/O These bidirectionaI signals address memory or I/0 devices within the system. They form the Iow order 20 bits of the 24 bit address bits that the system offers. These lines are enabled onto the bus while BALE is high and are latched when BALE goes from a high to a low state. These can be driven by a controlIer board acting as a bus master. SBHE- C01 I/O This output signal (System Bus High Enable) indicates (when Iow) that the high haIf of the SD data bus should transfer the data on boards which support the fuIl l6-bit data bus. It can be driven by a controller board actinq as a bus master. S0D A09 I/O SD1 A08 I/O SD2 A07 I/O SD3 A06 I/O SD4 A05 I/O SD5 A04 I/O SD6 A03 I/O SD7 A02 I/O These bidirectional signals are the low 8 bits of the system data bus. They should be used exclusively by all eight bit devices to transfer data. Sixteen-bit devices should use these lines to transfer onIy the low half of a data word when the address line A0 is low. These can be driven by a controIIer board acting as a bus master. SD08 C11 I/O SD09 C12 I/O SD10 C13 I/O SD11 C14 I/O SD12 C15 I/O SD13 C16 I/O SD14 C17 l/O SD15 C18 I/O These bidirectional signals are the high 8 bits of the system data bus. Sixteen bit devices should use these lines to transfer the high half of a data word when the line SBHE- is low. These can be driven by a controller board acting as a bus master. SMRDC- B12 O This output line (Standard Memory Read) is active (low) only when an address from 000000h to 0FFFFFh is decoded. This Iine is derived from MRDC-. SMWTC- B11 O This output line (Standard Memory Write) is active (low) only when an address from 0000000h to 0FFFFFh is decoded. This line is derived from MWTC-. T/C B27 O This output signal (when high) indicates that the Terminal Count of a DMA operation has been reached. It should be decoded with the appropriate DAKx line for proper operation. +5 Vdc B03 B29 D16 -5 Vdc B05 -- This line is connected to the system power supply for minus 5 volts. This supply is intended for low-current usage only (500 mA) . -I2 Vdc B07 -- This line is connected to the system power supply for minus 12 volts. This supply is intended for low-current usage only (1.0 A). +12 Vdc B09 -- This line is connected to the system power supply for I2 voIts. In addition to the maximum current available from the suppIv, the maximum current aIlowed on this contact is 1.5 A.